package com.neusoft.NursingHome.service;

import com.neusoft.NursingHome.po.Customer;
import java.util.List;

public interface CustomerService {

    /**
     * 查询所有的客户
     * @return 客户列表
     */
    List<Customer> getAllCustomers();

    /**
     * 通过姓名模糊查询客户
     * @param name 客户姓名
     * @return 客户列表
     */
    List<Customer> searchCustomersByName(String name);
    /**
     * 通过老人类型和姓名模糊查询客户
     * @param name 客户姓名
     * @return 客户列表
     */
    List<Customer> searchCustomersByNameAndType(String name,String type);

    /**
     * 通过客户类型筛选（护理/自理）
     * @param type 客户类型
     * @return 客户列表
     */
    List<Customer> getCustomersByType(String type);

    /**
     * 根据 ID 查询客户详情
     * @param id 客户 ID
     * @return 客户详情
     */
    Customer getCustomerById(Integer id);

    /**
     * 获取所有没有健康管家的护理老人
     * @return 客户列表
     */
    List<Customer> getCustomersWithoutHealthManager();

    /**
     * 分配健康管家
     * @param customerId 客户 ID
     * @param userId 健康管家 ID
     * @return 分配是否成功
     */
    boolean assignHealthManagerToCustomer(Integer customerId, Integer userId);

    /**
     * 查询护工服务的所有客户
     * @param userId 护工 ID
     * @return 客户列表
     */
    List<Customer> getCustomersByUserId(Integer userId);

    /**
     * 将客户的护工置为空
     * @param customerId 客户 ID
     * @return 操作是否成功
     */
    boolean removeHealthManagerFromCustomer(Integer customerId);

    /**
     * 逻辑删除客户
     * @param customerId 客户 ID
     * @return 删除是否成功
     */
    boolean logicalDeleteCustomer(Integer customerId);

    /**
     * 添加客户
     * @param customer 客户对象
     * @return 添加是否成功
     */
    boolean addCustomer(Customer customer);

    /**
     * 更新客户信息
     * @param customer 更新后的客户对象
     * @return 更新是否成功
     */
    boolean updateCustomer(Customer customer);
    /**
     * 根据客户 ID 移除其关联的护理级别
     * @param customerId 客户的唯一标识符
     * @return 移除是否成功
     */
    boolean removeCustomerLevel(Integer customerId);
    /**
     * 根据客户名称和没有护工（user_id 为空）模糊查询客户
     * @param name 客户姓名
     * @return 客户列表
     */
    List<Customer> searchCustomersByNameWithoutUserId(String name);
}